package com.xiongwei.collection;

import java.util.Comparator;
import java.util.TreeMap;

/**
 * SortedMap在遍历时严格按照key的顺序遍历,最常用实现类是TreeMap
 * 作为SortedMap的key必须实现Comparable接口,或者传入Comparator
 * 要严格按照compare()规范实现比较逻辑,否则TreeMap将不能正常运行
 *
 * @author XiongWei
 * @date 2021/1/7
 */
public class TreeMapUse {

    public static void main(String[] args) {
        /*
        Comparator要求实现一个比较方法,它负责比较传入的两个元素a和b,
        如果a<b,则返回负数,通常为-1;如果a=b,返回0;如果a>b,则返回正数,通常为1
         */
        TreeMap<PersonTree, Integer> map = new TreeMap<>(Comparator.comparing(p -> p.name));
        map.put(new PersonTree("Tom"), 1);
        map.put(new PersonTree("Bob"), 2);
        for (PersonTree key : map.keySet()) {
            System.out.println(key);
        }
        System.out.println(map.get(new PersonTree("Bob")));
    }
}

/*
Person类并未覆写equals()和hashCode()，因为TreeMap不使用equals()和hashCode(),而是用compareTo比较
 */
class PersonTree {
    String name;

    PersonTree (String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "{person: " + name + "}";
    }
}